///********************************************************************************

// **** Copyright (C), 2019, Fortior Technology Co., Ltd.                      ****

// ********************************************************************************
// * File Name     : UART.c
// * Author        : Bruce HW&RD
// * Date          : 2019-09-11
// * Description   : .C file function description
// * Version       : 1.0
// * Function List :
// * 
// * Record        :
// * 1.Date        : 2019-09-11
// *   Author      : Bruce HW&RD
// *   Modification: Created file

//********************************************************************************/

#include <MyProject.h>
#include <FU68xx_4_MCU.h>

void UART2_Init(void)
{
    SetBit(PH_SEL , UART2EN);   //P3[6]as UART2_RXD; P3[7]as UART2_TXD

//#if 1
    ClrBit(P0_OE , P01);        //输入使能  P0.1 RX
    SetBit(P0_PU , P01);        //上拉电阻
    SetBit(P0_OE , P00);        //输出使能  P0.0 TX       
    SetBit(P0_PU , P00);        //上拉电阻 	
//#endif

    ClrBit(UT2_CR , UT2MOD1);	//00-->单线制8bit		01-->8bit uart(波特率可设置)
    SetBit(UT2_CR , UT2MOD0);	//01-->单线制9bit	    11-->9bit uart(波特率可设置)

    ClrBit(UT2_CR , UT2SM2);    //0-->单机通讯			1-->多机通讯；
    SetBit(UT2_CR , UT2REN);    //0-->不允许串行输入	1-->允许串行输入，软件清0;
    ClrBit(UT2_CR , UT2TB8);	//模式2/3下数据发送第9位，在多机通信中，可用于判断当前数据帧的数据是地址还是数据，TB8=0为数据，TB8=1为地址
    ClrBit(UT2_CR , UT2RB8);	//模式2/3下数据接收第9位，若SM2=0,作为停止位

    PSPI_UT21 = 0;              //中断优先级时最低
    PSPI_UT20 = 0;

    ClrBit(UT2_BAUD , BAUD2_SEL);//倍频使能0-->Disable  1-->Enable
//    SetBit(UT2_BAUD , UART2CH);
//    ClrBit(UT2_BAUD , UART2CH);  //UART2端口功能转移使能0：P36->RXD P37->TXD 1:P01->RXD P00->TXD
    EA = 1;                        //中断总使能
//    SetBit(UT2_BAUD , UART2IEN); //UART2中断使能0-->Disable  1-->Enable
    UT2_BAUD = 0x009B;           //波特率可设置 = 24000000/(16/(1+ UT_BAUD[BAUD_SEL]))/(UT_BAUD+1)
                                 //9B-->9600 0x000c-->115200 0x0005-->256000
    SetBit(UT2_BAUD , UART2CH);
    SetBit(UT2_BAUD , UART2IEN); //UART2中断使能0-->Disable  1-->Enable
                                 
}


void put_char(unsigned char c)
{
    UT2_DR = c;
    ClrBit(UT2_CR , UT2TI);
    while(!ReadBit(UT2_CR , UT2TI));
    ClrBit(UT2_CR , UT2TI);
}

void put_string(unsigned char *str)
{
    while(*str != 0)
    {
        put_char(*str);
        str++;
    }
}
